package io.zhengsh.jvm.oom;

import static java.lang.Thread.sleep;

/**
 * 高并发请求服务器时，进场出现如下异常：java.lang.OutOfMemoryError: unable to create new native thread
 * 准确的来说 native thread 异常与对应的平台有关
 * 导致原因：
 * 1、你应用创建了太多的线程，一个应用创建多个线程，超过系统承载极限
 * 2、你的服务器不允许你的应用程序创建这么多的线程，linux 系统默认允许单个进程可以创建的线程数量的 1024 个，
 *    你的应用创建超过这个线程数量，就会报 java.lang.OutOfMemoryError ： unable to create new native thread
 * <p>
 * 解决思路：
 * 1、想办法降低你应用程序创建线程的数量，分析应用是否真的需要创建这么的多的线程，如果不是，改代码将线程数降到最低。
 * 2、对于有的应用，确实需要创建很多线程，远远超过 linux 系统的默认 1024 线程的限制，可以通过修改 linux 服务器配置，扩大 linux 默认限制。
 */
public class UnableCreateThreadDemo {

    public static void main(String[] args) {

        for (int i=1 ; ;i++ ) {
            System.out.println(" ------- i: " + i);
            new Thread(()-> {
                try {
                    sleep(Integer.MAX_VALUE);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            } , "" +i).start();
        }
    }
}
